using System.Collections.Generic;
using System.Threading.Tasks;

namespace System.IO.Compression;

public static class ZipArchiveExtensions
{
    /// <summary>
    /// 在 <paramref name="zip"/> 中创建一个新的文本文件并将 <paramref name="lines"/> 写入其中。
    /// </summary>
    public static async Task CreateTextEntryAsync(this ZipArchive zip, string entryName, IEnumerable<string> lines)
    {
        await using var writer = new StreamWriter(zip.CreateEntry(entryName).Open());

        foreach (var line in lines)
        {
            await writer.WriteLineAsync(line);
        }
    }

    /// <summary>
    /// 在 <paramref name="zip"/> 中创建一个新的文本文件并将 <paramref name="text"/> 写入其中。
    /// </summary>
    public static Task CreateTextEntryAsync(this ZipArchive zip, string entryName, string text) =>
        zip.CreateTextEntryAsync(entryName, [text]);

    /// <summary>
    /// 在 <paramref name="zip"/> 中创建一个新的二进制文件并将 <paramref name="data"/> 写入其中。
    /// </summary>
    public static async Task CreateBinaryEntryAsync(this ZipArchive zip, string entryName, ReadOnlyMemory<byte> data)
    {
        await using var stream = zip.CreateEntry(entryName).Open();
        await stream.WriteAsync(data);
    }
}
